import pandas as pd
import numpy as np

# 1. 读取原始数据（假设第一行为英文列名，第二行为中文列名或数据行）
file_path = "data/水泥煅烧课程项目数据.xlsx"
raw = pd.read_excel(file_path, sheet_name="all_data", header=[0,1])

# 2. 保留原始的前两行
head2 = raw.iloc[:2].copy()

# 3. 从第三行开始做数据预处理
df = raw.iloc[2:].reset_index(drop=True)

# 2. 删除无关列
df.drop(columns=['ID', 'date', 'time'], inplace=True, errors='ignore')

# 3. 删除含“游离钙”的列（从首行判断内容）
first_row = df.iloc[0]
columns_to_drop = first_row[first_row.astype(str).str.contains('游离钙', na=False)].index.tolist()
df.drop(columns=columns_to_drop, inplace=True, errors='ignore')

# 4. 删除缺失比例超过60%的列
threshold = 0.6 * len(df)
df.dropna(thresh=threshold, axis=1, inplace=True)

# 5. 删除数值全相同的列
nunique = df.apply(pd.Series.nunique)
df = df.loc[:, nunique > 1]

# 6. 删除“入窑煤粉1/2/3/5”相关列（关键词模糊匹配）
keywords = ['入窑煤粉1', '入窑煤粉2', '入窑煤粉3', '入窑煤粉5']
ruyao_cols = [col for col in df.columns if any(k in str(col) for k in keywords)]
df.drop(columns=ruyao_cols, inplace=True, errors='ignore')

# 7. 将非数字类型统一转换为 NaN
df.replace(' ', np.nan, inplace=True)
df = df.apply(pd.to_numeric, errors='coerce')

# 8. 线性插值填充空值（前后最多各5个）
df.interpolate(method='linear', limit_direction='both', limit=5, inplace=True)

# 9. 保存处理后的数据
df.to_csv("data\预处理后数据.csv", index=False, encoding='utf-8-sig')
print("✅ 数据预处理完成，已保存为 '预处理后数据.xlsx'")